package cn.krund.lyc.hotlerobot.utils;


import org.apache.log4j.Logger;

/**
 * @包名: cn.krund.lyc.hotlerobot.utils
 * @作者: 刘育成
 * @时间: 2018/3/22  10:08
 * @org: 克路德人工智能
 * @描述: TODO
 * @fileName: KrundLog
 */

public class KrundLog {
    /** log打印开关 */
    public static final boolean SWITCH_LOG = true;

    private static boolean isConfigured = false;

    /**
     * 记录调试日志
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的调试日志
     */
    public static void d(String tag, String message) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.debug(message);
        }
    }

    /**
     * 记录调试日志重载方法
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的调试日志
     * @param exception
     */
    public static void d(String tag, String message, Throwable exception) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.debug(message, exception);
        }
    }

    /**
     * 记录消息日志
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的消息日志
     */
    public static void i(String tag, String message) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.info(message);
        }
    }

    /**
     * 记录消息日志重载方法
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的消息日志
     * @param exception
     */
    public static void i(String tag, String message, Throwable exception) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.info(message, exception);
        }
    }

    /**
     * 记录警告日志
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的警告日志
     */
    public static void w(String tag, String message) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.warn(message);
        }
    }

    /**
     * 记录警告日志重载方法
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的警告日志
     * @param exception
     */
    public static void w(String tag, String message, Throwable exception) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.warn(message, exception);
        }
    }

    /**
     * 记录错误日志
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的错误日志
     */
    public static void e(String tag, String message) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.error(message);
        }
    }

    /**
     * 记录错误日志重载方法
     * 静态方法，对外提供统一接口写入日志
     * @param tag 需要记录日志的类名
     * @param message 需要记录的错误日志
     * @param exception
     */
    public static void e(String tag, String message, Throwable exception) {
        if (SWITCH_LOG) {
            Logger LOGGER = getLogger(tag);
            LOGGER.error(message, exception);
        }
    }

    /**
     * 获取LOG日志
     * 根据tag名称获取对应的日志记录，tag为null或者空时获取机器人端的日志
     * @param tag 记录日志时写入的tag名称
     * @return
     */
    private static Logger getLogger(String tag) {
        if (!isConfigured) {
            ConfigureLog4j.configure();
            isConfigured = true;
        }
        Logger logger;
        if (null == tag || null != tag && tag.isEmpty()) {
            logger = Logger.getRootLogger();
        } else {
            logger = Logger.getLogger(tag);
        }
        return logger;
    }
}

